TEST работает точно так же как и логическая операция AND. Одна разница что результат не сохраняется, но зато выставляются флаги для последующего условного перехода. Данное свойство позволяет использовать TEST для проверки флагов. Итак, как поведет себя тест. А вот так. Переставим какое-нибуть число в двоичной системе.
00000100 (4 в десятичной)
Хотим проверить это число на установку этого бита в 1, получается что нужно написать:
test 4,4
А дальше условный переход например JNZ. Переход будет, если единицы совпадают. Но дело в том, что этот бит установлен не только у 4, но еще и у:
5 000000101 7 000000111 12 00001100
И во всех случаях TEST должна работать одинаково, так как установлен этот бит. Пробуем?
MODEL TINY
STACK 100h
DATASEG
str1 DB 'Yes three bit $'
str2 DB 'Not three bit $'
CODESEG
start:
mov ax,@data
mov ds,ax
mov cx,5
test cx,4
jnz yesbit
mov dx,offset str2
jmp print
yesbit:
mov dx,offset str1
print:
mov ah,09h
int 21h
EndProgs:
mov ah,04Ch
mov al,1h
int 21h
end start
В результате выполнения данной программы появится надпись:

Все правильно в числе 5 третий бит установлен. Можете поэкспериментировать с другими числами.